/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package jhlper.bills;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Hashtable;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import jhlper.models.AddressBookBean;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
 *
 * @author Administrator
 */
    public class AddressBook {

    
    public boolean newCard(AddressBookBean newcard, boolean flag){
        
        Document  doc;
        Element addressbook,card;
        Element name,  mobile,   office,  home,  qq,  email,  other; 
        boolean fiag = false;
        
        try {
            
            DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = f.newDocumentBuilder();
            
            File file = new File ("addressbook");
            if(! file.exists()){
                file.mkdir();
                
            }
            file = new File("addressbook/addressbook.xml");
            if( ! file.exists()){
                flag=true;
                file.createNewFile();
                doc=db.newDocument();
                addressbook = doc.createElement("addressbook");
            }else{
                doc=db.parse(file);
                addressbook = (Element)doc.getElementsByTagName("addressbook").item(0);
                
            }
            
            card = doc.createElement("card");
            
            name= doc.createElement("name");
            
            mobile= doc.createElement("mobile");
            
           office= doc.createElement("office");
            
            home= doc.createElement("home");
            
            qq= doc.createElement("qq");
            
            email= doc.createElement("email");
            
            other= doc.createElement("other");
            //为name的等元素添加文本节点内容，内容来自于newcard参数中的属性。
            
            name.appendChild(doc.createTextNode(newcard.getName()));
            
            mobile.appendChild(doc.createTextNode(newcard.getMobile()));
            
            office.appendChild(doc.createTextNode(newcard.getOffice()));
            
            home.appendChild(doc.createTextNode(newcard.getHome()));
            
            qq.appendChild(doc.createTextNode(newcard.getQq()));
            
            email.appendChild(doc.createTextNode(newcard.getEmail()));
            
            other.appendChild(doc.createTextNode(newcard.getOther()));
            
            
            
            card.appendChild(name);
            card.appendChild(mobile);
            card.appendChild(office);
            card.appendChild(home);
            card.appendChild(qq);
            card.appendChild(email);
            card.appendChild(other);
            
            
            addressbook.appendChild(card);
            if(flag){
                doc.appendChild(addressbook);
                
            }
            
            
            //各元素之间
            
            TransformerFactory ff = TransformerFactory.newInstance();
            Transformer t = ff.newTransformer();
            FileWriter fout = new FileWriter(file);
            t.transform(new DOMSource(doc), new StreamResult(fout));
            return true;
            
            
            
        } catch (Exception e) {
            e.printStackTrace();
            return false;
      
        }
        
        
        
        
  
       
  }
    public boolean moifyCard(AddressBookBean oldcard) throws TransformerConfigurationException, IOException, TransformerException, ParserConfigurationException, SAXException{
        Document doc;
        NodeList cards;
        Element addressbook,card,oldname,newcard,name,
               mobile,office,home,qq,email,other;
        try{
           DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = f.newDocumentBuilder();
            
            File file = new File ("addressbook");
            if(! file.exists()){
               
                return false;
            }
            doc = db.parse(file);
            addressbook=(Element)doc.getElementsByTagName("addressbook").item(0);
            cards=doc.getElementsByTagName("card");
            for (int i = 0; i < cards.getLength(); i++) {
                card=(Element)cards.item(i);
                oldname=(Element)card.getElementsByTagName("name").item(0);
                if (oldname.getFirstChild().getNodeValue().equals(oldcard.getName())) {
                    newcard=doc.createElement("card");
                    name=doc.createElement("name");
                    mobile=doc.createElement("mobile");
                   home=doc.createElement("home");
                    office=doc.createElement("office");
                    qq=doc.createElement("qq");
                    email=doc.createElement("email");
                    other=doc.createElement("other");
                    name.appendChild(doc.createTextNode(oldcard.getName()));
                   mobile.appendChild(doc.createTextNode(oldcard.getMobile()));
                    office.appendChild(doc.createTextNode(oldcard.getOffice()));
                   home.appendChild(doc.createTextNode(oldcard.getHome()));
                    qq.appendChild(doc.createTextNode(oldcard.getQq()));
                    email.appendChild(doc.createTextNode(oldcard.getEmail()));
                    other.appendChild(doc.createTextNode(oldcard.getOther()));
                    newcard.appendChild(name);
                    newcard.appendChild(mobile);
                    newcard.appendChild(office);
                    newcard.appendChild(home);
                    newcard.appendChild(qq);
                    newcard.appendChild(email);
                    newcard.appendChild(newcard);
                    addressbook.replaceChild(newcard, card);
                    TransformerFactory ff=TransformerFactory.newInstance();
                    Transformer t=ff.newTransformer();
                    t.setOutputProperty("encoding", "GB2312");
                    FileWriter fout=new FileWriter(file);
                    t.transform(new DOMSource(doc),new StreamResult(file));
                    return  true;
                    
                }
 
            }
        return false;
        }catch(Exception e){
            e.printStackTrace();
            return  false;
        }
  
  }
     public boolean delCard(String name) throws ParserConfigurationException, SAXException, IOException, TransformerConfigurationException, TransformerException{
         Document doc;
         NodeList cards = null;
         Element addressbook,card,nowname;
        try{
            DocumentBuilderFactory f=DocumentBuilderFactory.newInstance();
            DocumentBuilder db=f.newDocumentBuilder();
            File file=new File("addreebook/addreebook.xml");
            if (! file.exists()) {
                return false;
                
            }
            doc=db.parse(file);
            addressbook=(Element)doc.getElementsByTagName("addressbook").item(0);
            cards=doc.getElementsByTagName("card");
            for (int i = 0; i <cards.getLength(); i++) {
                card=(Element)cards.item(i);
                nowname =(Element)card.getElementsByTagName("name").item(0);
                if (nowname.getFirstChild().getNodeValue().equals(name)) {
                    addressbook.removeChild(card);
                    
                }
                
            }
            TransformerFactory ff=TransformerFactory.newInstance();
            Transformer t=ff.newTransformer();
            t.setOutputProperty("encoding", "GB2312");
            FileWriter fout=new FileWriter(file);
            t.transform(new DOMSource(doc), new StreamResult(file));
            return true;
        
        } catch(Exception e){
            e.printStackTrace();
            return false;
        }
  
    }  
     public Hashtable getAllCards(){
         Document doc;
         NodeList cards;
         Element card;
         String name, mobile,office,home,qq,email,other;
         try{
              DocumentBuilderFactory f=DocumentBuilderFactory.newInstance();
            DocumentBuilder db=f.newDocumentBuilder();
            File file=new File("addreebook/addreebook.xml");
            if (! file.exists()) {
                return null;
             
         }
            doc=db.parse(file);
            cards=doc.getElementsByTagName("card");
             if (cards.getLength()==0) {
                 return null;
             }
             Hashtable h=new Hashtable();
             AddressBookBean current;
             for (int i = 0; i < cards.getLength(); i++) {
                 card=(Element)cards.item(i);
                 name=((Element)card.getElementsByTagName("name").item(0)).getFirstChild().getNodeValue();
                 mobile=((Element)card.getElementsByTagName("mobile").item(0)).getFirstChild().getNodeValue();
                 home=((Element)card.getElementsByTagName("home").item(0)).getFirstChild().getNodeValue();
                 office=((Element)card.getElementsByTagName("office").item(0)).getFirstChild().getNodeValue();
                qq=((Element)card.getElementsByTagName("qq").item(0)).getFirstChild().getNodeValue();
                 email=((Element)card.getElementsByTagName("email").item(0)).getFirstChild().getNodeValue();
                 other=((Element)card.getElementsByTagName("other").item(0)).getFirstChild().getNodeValue();
                 current=new AddressBookBean(name, mobile, home, office, qq, email, other);
                 h.put(name, current);
     
             }
             return h;
                 
             }catch(Exception e){
                 e.printStackTrace();
                 return null;
             }
 
        }
     public static void main(String args[]){
         
         
     }
        
    }

